# 导入 os 模块，用于文件操作
import os

# 导入 time 模块，用于时间测量
import time


def process_line(line):
    # 定义一个函数，用于处理每一行数据
    # line 是要处理的行数据
    return line.strip().upper()
    # 去除行首尾空白字符并转换为大写


def read_file_line_by_line(filename):
    # 定义一个函数，用于逐行读取文件
    # filename 是要读取的文件名
    processed_lines = []
    # 初始化处理后的行列表
    line_count = 0
    # 初始化行计数器

    with open(filename, "rb") as file:
        # 打开文件进行读取
        for line in file:
            # 遍历文件的每一行
            processed_line = process_line(line)
            # 处理当前行
            processed_lines.append(processed_line)
            # 将处理后的行添加到列表
            line_count += 1
            # 行计数器递增
            if line_count == 888:
                print(processed_lines[88])

            # 每处理1000行打印一次进度
            if line_count % 1000 == 0:
                # 如果行数是1000的倍数
                print(f"已处理 {line_count} 行")
                # 打印处理进度

    return processed_lines, line_count
    # 返回处理后的行列表和总行数


def read_file_line_by_line_generator(filename):
    # 定义一个生成器函数，用于逐行读取文件（内存优化版本）
    # filename 是要读取的文件名
    with open(filename, "rb") as file:
        # 打开文件进行读取
        for line in file:
            # 遍历文件的每一行
            yield process_line(line)
            # 生成处理后的行


def create_large_test_file(filename, size_mb=10):
    # 定义一个函数，用于创建大型测试文件
    # filename 是要创建的文件名
    # size_mb 是文件大小（MB）
    print(f"正在创建 {size_mb}MB 的测试文件...")
    # 打印创建文件信息

    with open(filename, "w", encoding="utf-8") as file:
        # 打开文件进行写入
        for i in range(size_mb * 1024 * 10):  # 假设每行约100字节
            # 循环写入数据
            file.write(f"这是第 {i} 行数据，包含一些测试内容用于演示大文件读取\n")
            # 写入测试数据

    print(f"测试文件 {filename} 创建完成")
    # 打印文件创建完成信息


# 创建测试文件
# test_filename = "large_test_file.txt"
test_filename = "../maoxuan.pdf"
# 设置测试文件名
# create_large_test_file(test_filename, 5)
# 创建5MB的测试文件

# 测试逐行读取
print("\n--- 逐行读取测试 ---")
# 打印逐行读取测试标题
start_time = time.time()
# 记录开始时间
processed_data, total_lines = read_file_line_by_line(test_filename)
# 逐行读取文件
end_time = time.time()
# 记录结束时间
print(f"逐行读取完成，共处理 {total_lines} 行，耗时 {end_time - start_time:.2f} 秒")
# 打印处理结果

# 测试生成器版本（内存优化）
print("\n--- 生成器版本测试 ---")
# 打印生成器版本测试标题
start_time = time.time()
# 记录开始时间
line_count = 0
# 初始化行计数器
for processed_line in read_file_line_by_line_generator(test_filename):
    # 遍历生成器
    line_count += 1
    # 行计数器递增
    if line_count % 1000 == 0:
        # 如果行数是1000的倍数
        print(f"已处理 {line_count} 行")
        # 打印处理进度
end_time = time.time()
# 记录结束时间
print(f"生成器版本完成，共处理 {line_count} 行，耗时 {end_time - start_time:.2f} 秒")
# 打印处理结果

# 清理测试文件
# os.remove(test_filename)
# 删除测试文件
# print(f"测试文件 {test_filename} 已删除")
# 打印文件删除信息
